
#ifndef PLANIFICADOR_H_
#define PLANIFICADOR_H_

#include <stdint.h>
#include "Prueba-ArchConfig.h"
#include <pthread.h>
#include <semaphore.h>
#include "log.h"

typedef struct tInfo{
	int32_t type; //el tipo de paquete 1-lectura 2-escritura 3- consola //
	int32_t sector;// es el logico//
	int32_t socket;
	uint32_t auxiliar;
	void* dato;
	struct tInfo* Sig;
}tInfo;

typedef struct tNodo{
	tInfo* Info;
	int32_t Cilindro;
	struct tNodo* Sig;
	struct tNodo* Ant;

}tNodo;

typedef struct{
	uint32_t Cilindro;
	uint32_t  Hear;
	uint32_t Sector;
}t_CHS;


//variables globales // ojo con el sincronismo

datosConfigPPD *archPPD;
int32_t timeEntreSector;

int16_t subiendo;

pthread_mutex_t sem_Lista;			//debe arrancar en 1
pthread_mutex_t semContador_Lista; //debe arrancar en 0
pthread_mutex_t semContador_Lista2;
sem_t semContadorL;
tNodo* Lista;
tNodo* ListaRev;
 tNodo* Lista2;
 tNodo* ListaRev2;
t_CHS* CHStot;
t_CHS* CHSActual;

int32_t Tracer;
pthread_mutex_t sem_Tracer;

e_console_mode estado;

char* LogFileName;

void* punteroMmap;

void planifica(void* config);
void ifType3(tInfo *Nodo,t_CHS* NodoCHS, datosConfigPPD* arch );
void ifType2(tInfo *Nodo,t_CHS* NodoCHS, datosConfigPPD* arch );
void ifType1(tInfo *Nodo,t_CHS* NodoCHS, datosConfigPPD* arch );
//void secRecorridos(t_CHS *NodoCHS);
void secRecorridos(t_CHS *NodoCHS, e_console_mode estado);
void RecorrerLista(tNodo* lis);

#endif /* PLANIFICADOR_H_ */
